// @author: caoshi
// @date: 2021-04-29 20:34
/**
	关闭通道 close(ch)
	demo:
    子groutine: 写出10个数据, 每写入一个数,主groutine读取一次, 解除阻塞;
	主groutine 读取数据, 每次读取数据阻塞一次, 子groutine写出一个, 解除阻塞.
*/
package main

import (
	"fmt"
	"time"
)

func main() {
	ch1 := make(chan int)
	go sendData(ch1)

	// 读取通道中的数据
	for {
		time.Sleep(1 * time.Second)
		v, ok := <-ch1
		if !ok {
			// 最后一次读取到数据时通道已关闭ok是false, v是通道默认值0
			fmt.Println("已经读取到所有数据", ok, v)
			break
		}
		fmt.Println("读取到数据: ", v, ok)
	}

	fmt.Println("main over..")
}

func sendData(ch chan int) {
	// 发送方, 将依次发送10个数
	for i := 0; i < 10; i++ {
		ch <- i // 将i写入通道中
	}
	close(ch) // 关闭通道
}
